<?php

namespace framework\support;

class MiddleWare
{
    private static $_instance = null;
    private static  $database = null;
    private static $config = [];
    /**
     * Single constructor. 私有的构造方法
     */
    private function __construct()
    {;
    }

    /**
     * @purpose: 创建__clone方法防止对象被复制克隆
     */
    private function __clone()
    {
        // E_USER_ERROR只能通过trigger_error($msg, E_USER_ERROR)手动触发。
        // E_USER_ERROR是用户自定义错误类型，可以被set_error_handler错误处理函数捕获，允许程序继续运行。
        // E_ERROR是系统错误，不能被set_error_handler错误处理函数捕获，程序会退出运行
        trigger_error('Clone is not allow!', E_USER_ERROR);
    }


    /**
     * @return Single|Object 单例方法,用于访问实例的公共的静态方法
     */
    public static function getInstance()
    {
        if (!(self::$_instance instanceof self)) {
            self::$_instance = new self;
            $configFile = BasePath . "/app/config/middleware.php";
            if (file_exists($configFile)) {
                self::$config = require($configFile);
            }
        }
        return self::$_instance;
    }
    /**
     * 读取中间件进行处理
     */
    public static function before($route)
    {
        foreach (self::$config as $key => $value) {
            if ($key == $route || $key == '') {
                foreach ($value as $middleware) {
                    $file = BasePath . '/app/middleware/' . $middleware . '.php';
                    if (file_exists($file)) {
                        require_once $file;
                        $class = new $middleware();
                        $result = $class->before();
                        if (!$result) {
                            return false;
                        }
                    } else {
                        print("中间件不存在 {$file}");
                    }
                }

            }
        }
    }

    /**
     * 读取中间件进行处理
     */
    public static function after($route)
    {
        print("after:{$route}\n");
    }
}
